﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MultiGed2.Controls
{
 public partial class VlakList : UserControl
 {
  private DataGridViewCellStyle boldFont = new DataGridViewCellStyle();

  public VlakList()
  {
   InitializeComponent();
   boldFont.Font = new Font(dgvVlaky.Font.FontFamily, dgvVlaky.Font.Size, FontStyle.Bold);
  }

  private List<Vlak> seznam = new List<Vlak>();

  public void PridejVlak(Vlak v)
  {
   seznam.Add(v);
   dgvVlaky.RowCount = seznam.Count;
   dgvVlaky.Refresh();
  }

  public void PridejVlaky(List<Vlak> vlaky)
  {
   seznam.AddRange(vlaky);
   dgvVlaky.RowCount = seznam.Count;
   dgvVlaky.Refresh();
  }

  public Vlak Vybrany
  {
   get
   {
    if (dgvVlaky.CurrentCell != null
     && dgvVlaky.CurrentCell.RowIndex >= 0
     && seznam.Count > dgvVlaky.CurrentCell.RowIndex)
    {
     return seznam[dgvVlaky.CurrentCell.RowIndex];
    }
    else
     return null;
   }
  }

  //public delegate void VlakZmenaVyberu(Vlak v);
  //private VlakZmenaVyberu _callbackVyberVlaku = null;

  //public void RegisterSelectCallback(VlakZmenaVyberu cb)
  //{
  // _callbackVyberVlaku = cb;
  //}

  public delegate void VybranyVlak(object sender, EventArgs e);
  public event VybranyVlak onVyberVlaku;

  private void dgvVlaky_SelectionChanged(object sender, EventArgs e)
  {
   if (onVyberVlaku != null
    && dgvVlaky.CurrentCell.RowIndex >= 0
    && seznam.Count > dgvVlaky.CurrentCell.RowIndex)
   {
    onVyberVlaku(this, e);
   }
  }

  public void SmazatSeznam()
  {
   seznam.Clear();
   dgvVlaky.RowCount = 0;
   dgvVlaky.Refresh();
  }

  public void SmazatVlak(Vlak v)
  {
   if (seznam.Contains(v))
   {
    seznam.Remove(v);
    dgvVlaky.RowCount = seznam.Count;
    dgvVlaky.Refresh();
   }
  }

  private void dgvVlaky_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
  {
   if (e.RowIndex >= 0 && e.RowIndex < seznam.Count)
   {
    Vlak v = seznam[e.RowIndex];
    switch (e.ColumnIndex)
    {
     case 0:
      e.Value = v.kategorie;
      break;
     case 1:
      e.Value = String.Format("{0}", v.cisloVlaku);
      break;
     case 2:
      e.Value = v.CasOdjezdu;
      break;
     case 3:
      e.Value = v.DopravnaVych;
      break;
     case 4:
      e.Value = v.DopravnaCil;
      break;
     case 5:
      e.Value = v.DopravnaOper;
      break;
     case 6:
      e.Value = v.trasovani;
      break;
    }
   }
  }

  private void dgvVlaky_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
  {
   if (e.RowIndex >= 0 && (e.ColumnIndex == 0 || e.ColumnIndex == 1) && e.RowIndex < seznam.Count)
   {
    Vlak v = seznam[e.RowIndex];
    Color c = Color.Black; ;
    switch (v.kategorie)
    {
     case KategorieVlaku.EC:
     case KategorieVlaku.MEC:
     case KategorieVlaku.EN:
     case KategorieVlaku.MEN:
     case KategorieVlaku.IC:
     case KategorieVlaku.MIC:
      c = Color.Green; break;
     case KategorieVlaku.Ex:
     case KategorieVlaku.MEx:
     case KategorieVlaku.R:
     case KategorieVlaku.MR:
      c = Color.Red; break;
     case KategorieVlaku.Sp:
     case KategorieVlaku.MSp:
     case KategorieVlaku.Os:
     case KategorieVlaku.MOs:
     case KategorieVlaku.Osz:
     case KategorieVlaku.MOsz:
      c = Color.Blue; break;
     case KategorieVlaku.Sv:
     case KategorieVlaku.MSv:
      c = Color.DarkBlue; break;
    }
    e.CellStyle.ForeColor = c;
    e.CellStyle.Font = boldFont.Font;
   }
  }
 }
}
